precision mediump float;
uniform float u_time;
uniform vec2 u_resolution;
/**
 * @brief 将二维向量绕原点旋转指定角度
 * @param v 需要旋转的二维向量
 * @param a 旋转角度（弧度）
 * @return 旋转后的二维向量
 */
vec2 rotate(vec2 v, float a) {
    float s = sin(a);
    float c = cos(a);
    mat2 m = mat2(c, s, -s, c);
    return m * v;
}

void main(void) {
    // 将屏幕坐标转换为归一化坐标系，保持宽高比一致
    vec2 p = (gl_FragCoord.xy * 2. - u_resolution) / min(u_resolution.x, u_resolution.y);
    float d = 0.5;
    vec4 col = vec4(1.);
    
    // 将坐标点按照时间旋转
    p = rotate(p, radians(u_time * 20.));
    
    // 判断旋转后的点是否在0度到60度的角度范围内,根据atan角度关系在第一象限和第三象限是满足该要求
    if(atan(p.y / p.x) > radians(0.) && atan(p.y / p.x) < radians(60.)) {
        // 在扇形区域内的处理逻辑
        
        // 绘制最外层圆环，颜色为红色
        d = length(p);
        d = smoothstep(0.4, 0.41, d) - smoothstep(0.41, 0.42, d);
        col = mix(col, vec4(1., 0., 0., 1.), d);
        
        // 绘制中间圆环，颜色为黄色
        float d1 = length(p);
        d1 = smoothstep(0.3, 0.31, d1) - smoothstep(0.31, 0.32, d1);
        col = mix(col, vec4(1., 1., 0., 1.), d1);
        
        // 绘制最内层圆环，颜色为品红色
        float d2 = length(p);
        d2 = smoothstep(0.2, 0.21, d2) - smoothstep(0.21, 0.22, d2);
        col = mix(col, vec4(1., 0., 1., 1.), d2);

    } else {
        // 在扇形区域外的处理逻辑
        
        // 绘制最外层圆环，颜色为浅绿色
        d = length(p);
        d = smoothstep(0.4, 0.41, d) - smoothstep(0.41, 0.42, d);
        col = mix(col, vec4(0.546, 1.000, 0.130, 1.000), d);
        
        // 绘制中间圆环，颜色为绿色
        float d1 = length(p);
        d1 = smoothstep(0.3, 0.31, d1) - smoothstep(0.31, 0.32, d1);
        col = mix(col, vec4(0., 1., 0., 1.), d1);
        
        // 绘制最内层圆环，颜色为青色
        float d2 = length(p);
        d2 = smoothstep(0.2, 0.21, d2) - smoothstep(0.21, 0.22, d2);
        col = mix(col, vec4(0., 1., 1., 1.), d2);

    }
    
    // 输出最终颜色
    gl_FragColor = col;
}